/*
 * interfaz.h
 *
 *  Created on: 22/09/2011
 *      Author: utn_so
 */

#ifndef INTERFAZ_H_
#define INTERFAZ_H_

#include "nipcManager.h"
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>


typedef struct _chs
{
	uint16_t c;
	uint8_t h;
	uint16_t s;
	float seekTime;
} chs;




typedef struct _stNodoPedido
{
	stPedido *info;
	struct _stNodoPedido *sgte;
}stNodoPedido;

typedef struct _stNodoSincro
{
	long sector;
	struct _stNodoSincro *sgte;
}stNodoSincro;


typedef struct _stDatosHilo
{
	stNodoPedido **listaPedidos;
	stNodoPedido **listaEjecutar;
	chs datosConfig;
	chs **posicionActual;
	char **pathFatFile;
	char **algoritmo;
	pthread_mutex_t *semaforo;
	int32_t delayLectura;
	int32_t delayEscritura;
	stNodoSincro **listaSincro;
	int32_t socketRaid;
	long contSincro;
	int32_t estoySincronizado;
	int32_t contadorEjecutar;
	int32_t agregadosEjecutar;
	int32_t sentidoGiro;
	sem_t *semaforoContador;
	int32_t hayQueLoguear;
	char ** pathConsola;
	char ** configConsola;
} stDatosHilo;


int32_t AgregarPedidoSincro (stNodoSincro **listaSincro,long sector);

int32_t AgregarPedido (stNodoPedido **listaPedidos,stPedido *pedido,
						char **algoritmo,int32_t *agregadosEjecucion,
						stNodoPedido **listaEjecutar, stNodoSincro **listaSincro,
						int32_t *contadorEjecutar, sem_t *semaforoContador);

stPedido* proximoPedidoSSTFConOmision(stNodoPedido **listaPedidos, chs **posicionActual,
		chs datosConfig,stPedido *omitir);

long modulo (long numero);
stPedido* proximoPedidoSSTF(stNodoPedido **listaPedidos, chs **posicionActual,
		chs datosConfig);

stPedido* proximoPedidoNSTEP(stNodoPedido **listaEjecutar, chs **posicionActual,
		chs datosConfig, int32_t *sentidoGiro);

stPedido* proximoPedidoNSTEPConOmision(stNodoPedido **listaEjecutar, chs **posicionActual,
		chs datosConfig, int32_t *sentidoGiro, stPedido *omitir);

//chs *obtenerCHS(long sector ,  chs datosConfig);
void obtenerCHSDif(long sector, chs datosConfig,chs *resultado);
stPedido* proximoPedidoSSTFSincro(stNodoPedido **listaPedidos, chs **posicionActual,
		chs datosConfig, stNodoSincro **listaSincro);
int32_t buscarSectorListaSincro (stPedido *pedido,stNodoSincro **listaSincro);
#endif /* INTERFAZ_H_ */
